<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
        迭代器

        迭代器的作用有三个
        - 为各类数据结构 提供统一、简便的访问接口
        - 让数据结构中的数据按照某种顺序排列
        - ES6创造了新的遍历语句 for...of 
        */

        let arr = ['a' , 'b' ,'c' ]
        for (const item of arr) {
            console.log(item);
        }
        /* 
        es6规定 默认的Iterator接口部署在数据结构的Symbol.iterator属性
        === 只要数据结构有 Symbol.iterator属性 那么就是可以遍历的 可以使用for...of方法
        Symbol.iterator属性到底是个啥  他是一个函数 是数据结构默认的遍历器生成函数  专门为了遍历而生
        只要执行这个函数  那么就会返回一个遍历器

        */
        let i = arr[Symbol.iterator]() // 调用方法时 就会创建一个指针对象 指向当前数据结构的起始位置 
        console.log(i , i.next()); //  调用一次next方法 就把指针指向第一个成员

        /* 
        js那些数据结构埋下了Symbol.iterator属性  （可以使用for...of遍历）
        - Array
        - Map
        - Set
        - String
        - agruments 对象 形参对象
        - NodeList  对象 获取的node节点
        
        并没有Object 因为Object不是序列化数据 想要遍历 一般用Object.entries() 方法结合 for...of 循环 / Object.keys() 结合forEach
        */



    </script>
</body>
</html>